package com.example.demo2;

/**
 * 静态内部类-单例模式
 * 根据静态内部类的特性,
 * <p>
 * 优点: 同时也是懒汉式的模式 也是线程安全的 ,并且代码更加的简洁
 * 缺点: 无
 */
public class SingletonDemo5 {

    private SingletonDemo5() {

        /**
         * 这段代码是为了防止 使用反射 获取 单例类的内容
         * 静态内部类 在 当前类加载(就是创建类)的时候 就会被初始化
         *
         */
        if (SingletonHandler.instance != null) {
            throw new RuntimeException("非法访问");
        }

    }


    //创建静态内部类
    private static class SingletonHandler {
        // 静态内部类 在 当前类加载(就是创建类)的时候 就会被初始化
        //静态内部类中创建单例,
        //在装在内部类的时候,才会创建对象
        // 类 jvm只会加载一遍 线程安全 是 jvm来控制的
        private static SingletonDemo5 instance = new SingletonDemo5();
    }

    public static SingletonDemo5 getInstance() {
        return SingletonHandler.instance;
    }

}
